﻿using System;
using System.Collections.Generic;
using JsonTemplateUtils;
using Newtonsoft.Json.Linq;

namespace JsonTemplateUtils
{
    class Program
    {
        // 模拟数据库查询结果类    ***********************    直接定义所需参数
        class User
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public List<string> Roles { get; set; }
            public Dictionary<string, object> Profile { get; set; }
        }

        static void Main()
        {
            // 模拟从数据库查询数据（实际使用时应替换为真实数据库操作） ************    获取到数据库数据  
            var user = new User
            {
                Id = 123,
                Name = "张三",
                Roles = new List<string> { "Admin", "Developer" },
                Profile = new Dictionary<string, object> {
                { "Age", 30 },
                { "Email", "zhangsan@example.com" }
            }
            };

            // 创建参数对象（与JSON模板中的占位符对应）         ************    组装参数
            var parameters = new
            {
                UserId = user.Id,
                UserName = user.Name,
                UserRoles = JArray.FromObject(user.Roles),  // 转换为JArray
                UserProfile = JObject.FromObject(user.Profile) // 转换为JObject
            };

            // 读取JSON模板（假设模板文件路径）
            string template = JsonTemplateUtils.GetJson("template.json");

            // 使用替换方法1
            string result1 = JsonTemplateUtils.AssemblingByReplace(template, parameters);
            Console.WriteLine("Replace方法结果：");
            Console.WriteLine(result1);

        // 使用替换方法2  
 


         string result2 = JsonTemplateUtils.AssemblingByArray(template, parameters);// 调用工具类,处理字模板
            Console.WriteLine("\nArray方法结果：");
            Console.WriteLine(result2);
        }
    }
}

// 示例模板文件内容（template.json）：
/*
{
    "user": {
        "id": "${UserId}",
        "name": "${UserName}",
        "metadata": "${UserProfile}",
        "roles": "${UserRoles}"
    }
}
*/

// 预期输出结果（格式化后）：
/*
{
    "user": {
        "id": 123,
        "name": "张三",
        "metadata": {
            "Age": 30,
            "Email": "zhangsan@example.com"
        },
        "roles": ["Admin","Developer"]
    }
}
*/